什麼是OM2M

過去,各家企業的物聯網設備的通信方式都不一樣,這樣的情況下,很難做到所有設備統一管理,OM2M提供了一套共通物聯網架構標準,將傳輸層與應用層可以分開,讓物聯網開發者可以專心在物聯網設備的整合開發,不需要忙於處理設備的與架構之間的傳輸,讓物聯網架構開發變得更輕鬆,OM2M也支援連接舊物聯網設備接口,將原本不支援OM2M的設備整合進來。

名詞介紹

OM2M的功能架構如下圖:
oneM2M Functional Architecture

圖源:官網介紹
  • AE(Application Entity) 應用個體:
    AE簡單來說就是物聯網設備實體,像是raspberry pi、手機這類可以執行OM2M的設備,可以以AE身分加入OM2M架構,每個AE會以AE-ID進行區分。
  • CSE(Common Services Entity) 共同服務個體:
    CSE扮演儲存、傳遞、轉換等功能的實體,通常以伺服器運行個體,每個CSE會以CSE-ID進行區分。
  • NSE(Network Services Entity) 網路服務個體:
    NSE提供了讓基礎網路服務接上CSE的功能,例如3GPP這種網路服務可以使用NSE加入CSE中進行服務。

OM2M的物聯網拓譜範例:
OneM2M Node topology

圖源:官網介紹
這個拓譜用以下種類將上述的角色再度細分:

  • IN(Infrastructure Node) 基礎節點:
    有IN-CSE與IN-AE,IN-CSE通常會在雲端運行,將MN-CSE的資料進行集中處裡以進行服務,IN-AE是指連接IN-CSE的個體,像是智慧型手機這種設備通常會是IN-AE。
  • MN(Middle Node) 中間節點:
    有MN-CSE與MN-AE,相對於IN-CSE,MN-CSE屬於在本地與MN-AE、ASN-CSE、ADN-AE進行資料整合與溝通,再將資料彙整給IN-CSE。
  • ASN(Application Service Node) 應用服務節點:
    有ASN-CSE與ASN-AE,ASN-CSE將ASN-AE資料整合後傳給MN-CSE,可以看做MN-CSE的分支節點。
  • ADN(Application Dedicated Node) 應用專屬節點:
    只有ADN-AE,以AE自成節點,直接與MN-CSE進行資料傳輸,故沒有ADN-CSE。

對於OM2M有些了解後我們就可以來建構OM2M囉~

事前準備

OM2M也是需要Java的,而且是Java 8 JDK喔,裝錯個它就不會動了喔,詳細安裝步驟可以看【Day01】ELK環境建置與介紹
OM2M需要裝兩個套件才能安裝

Git

sudo apt-get install git

Maven

sudo apt-get install maven

這樣就可以開始安裝了

開始安裝

一開始,我們先下載OM2M的安裝包

git clone https://git.eclipse.org/r/om2m/org.eclipse.om2m

然後進入org.eclipse.om2m

cd ./org.eclipse.om2m

然後開始安裝

mvn clean install -DskipTests=true

然後等他載一大堆東西就完成了

設定

裝好了以後,你會看到一大包資料夾,裡面有兩個資料夾我們會用到,把他們拉出來。

IN-CSE

cp -r ./org.eclipse.om2m/org.eclipse.om2m.site.in-cse/target/products/in-cse/linux/gtk/x86_64/ ./in-cse

MN-CSE

cp -r ./org.eclipse.om2m/org.eclipse.om2m.site.mn-cse/target/products/mn-cse/linux/gtk/x86_64/ ./mn-cse

這次測試,不需要動到設定,基本上用預設值就可以了,如果想改設定,可以去改各別資料夾的./configuration/config.ini 就可以設定OM2M了
詳細設定可以看官方config介紹
MN-CSE預設就會對IN-CSE的Port做連線了

啟動

IN-CSE與MN-CSE啟動方式一樣,分別執行start.sh就可以了
記得要開兩個terminal來執行喔,他們是在前台開著跑的,如果想在後台跑也可以用forever去跑Server
先啟動IN-CSE,再啟動MN-CSE,MN-CSE啟動時會自動向IN-CSE連線註冊

IN-CSE

chmod +x ./in-cse/start.sh
./in-cse/start.sh

MN-CSE

chmod +x ./mn-cse/start.sh
./mn-cse/start.sh

接下來可以開啟瀏覽器連到以下網站

IN-CSE: http://127.0.0.1:8080/webpage/

IN-CSE Loginpage

MN-CSE: http://127.0.0.1:8282/webpage/

MN-CSE Login page
預設帳號密碼都是admin就能登入看到資料了

IN-CSE

IN-CSE webpage

MN-CSE

MN-CSE webpage
超基本的OM2M架構就完成了

OM2M的CRUD

CSE的資料都是用RESTful Api架構進行更新的,我們可以用自己喜歡的程式來進行以下測試。
以下範例將使用Postman來做測試。

Postman下載

去Postman官網下載或是用wget下載

wget https://dl.pstmn.io/download/latest/linux64

然後解壓縮

tar xf ./linux64

執行Postman就可以打開了

./Postman/Postman


接下來我們就能來做CRUD了

Read

Method:GET URL:http://127.0.0.1:8282/~/mn-cse

Header Value
X-M2M-Origin admin:admin

標頭是拿來做登入驗證的

回應會是200

<?xml version="1.0" encoding="UTF-8"?>
<m2m:cb xmlns:m2m="http://www.onem2m.org/xml/protocols" xmlns:hd="http://www.onem2m.org/xml/protocols/homedomain" rn="mn-name">
    <ty>5</ty>
    <ri>/mn-cse</ri>
    <ct>20200223T203152</ct>
    <lt>20200223T203152</lt>
    <acpi>/mn-cse/acp-450541999</acpi>
    <cst>1</cst>
    <csi>mn-cse</csi>
    <srt>1 2 3 4 5 9 14 15 16 17 23 28</srt>
    <poa>http://127.0.0.1:8282/</poa>
</m2m:cb>

Create

我們可以新增一個AE的Container在MN-CSE上:
Method:POST URL:http://127.0.0.1:8282/~/mn-cse

Header Value
X-M2M-Origin admin:admin
Content-Type application/xml;ty=2

ty是個體類別,2是指AE

Body

<m2m:ae xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="MY_SENSOR" >
<api>app-sensor</api>
<lbl>Type/sensor Category/temperature Location/home</lbl>
<rr>false</rr>
</m2m:ae>


回傳200

<?xml version="1.0" encoding="UTF-8"?>
<m2m:ae xmlns:m2m="http://www.onem2m.org/xml/protocols" xmlns:hd="http://www.onem2m.org/xml/protocols/homedomain" rn="MY_SENSOR">
    <ty>2</ty>
    <ri>/mn-cse/CAE606347885</ri>
    <pi>/mn-cse</pi>
    <ct>20200224T010335</ct>
    <lt>20200224T010335</lt>
    <lbl>Type/sensor Category/temperature Location/home</lbl>
    <acpi>/mn-cse/acp-450541999</acpi>
    <et>20210224T010335</et>
    <api>app-sensor</api>
    <aei>CAE606347885</aei>
    <rr>false</rr>
</m2m:ae>

這時候可以在http://127.0.0.1:8282/webpage/welcome/index.html?context=/~&cseId=mn-cse看到多了MY_SENSOR

DELETE

刪除資料的話,先點選要刪除的物件(例如MY_SENSOR)
在用DELETE Method連線到網頁上看到那串藍色的網址就能刪除了

刪除後就看不到那個物件了

如果想深入研究這個API接口,可以看官方教學
一般通常會用工具(像是Node Red)來進行規劃,不會有人每個都用這樣建置啦XD
Node Red明天會來做詳細介紹與實作。

.article-content h1, .article-content h2, .article-content h3, .article-content h4, .article-content h5, .article-content h6 { margin-block-start: 0.5em; margin-block-end: 0.5em; }
#OM2M #IoT







你可能感興趣的文章

陣列由小到大排序

陣列由小到大排序

The introduction and difference between class component and function component in React

The introduction and difference between class component and function component in React

Web開發學習筆記04—條件運算式(Conditional Statements)

Web開發學習筆記04—條件運算式(Conditional Statements)






留言討論